package demo.practice.dp;

public class P525 {

    public static void main(String[] args) {
        P525 p525= new P525();
        p525.findMaxLength(new int[]{0,1});
    }
    //给定一个二进制数组 nums , 找到含有相同数量的 0 和 1 的最长连续子数组，并返回该子数组的长度。

    public int findMaxLength(int[] nums) {

        int[] store = new int[nums.length + 1];
        for (int i = 0; i < nums.length; i++) {
            store[i + 1] = nums[i] + store[i];
        }

        //从i~j之间的求和为 store[j]-store[i]


        //1、首先这个连续子数组为  偶数长
        //2、从最长的开始检查
        //如  0、1、1、1、1、0、0、0、0、0
        // 先假设  最长先为10, 索引为 0~9 的和看是否为  5

        int first = (nums.length & 1) == 0 ? nums.length - 1 : nums.length - 2;

        for(int j=first;j>0;j=j-2){
            for(int i=0;i<nums.length-j; i++ ){
                if((store[i+j+1] - store[i])*2== j+1  )    //
                    return j+1;
            }
        }
        return 0;

    }
}
